// 给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
// 说明：本题中，我们将空字符串定义为有效的回文串。

// 不是字母和数字忽略即可 时间复杂度击败75.74% 空间97.22
var isPalindrome = function (s) {
  let i = 0, j = s.length - 1;
  while (i <= j) {
    if (!judge(s.charCodeAt(i))) {
      i++;
      continue
    }
    if (!judge(s.charCodeAt(j))) {
      j--;
      continue
    }
    if (s[i] === s[j]) {
      i++;
      j--;
      continue
    } else if (compareChar(s.charCodeAt(i)) && compareChar(s.charCodeAt(j)) && Math.abs(s.charCodeAt(i) - s.charCodeAt(j)) === 32) {
      i++;
      j--;
      continue
    } else {
      return false;
    }
  }
  return true;
};
// 判断是不是字母和数字
function judge(ascii) {
  if ((ascii >= 48 && ascii <= 57) || (ascii >= 65 && ascii <= 90) || (ascii >= 97 && ascii <= 122))
    return true;
  else {
    return false
  }
}
// 判断纯字母
function compareChar(ascii) {
  if ((ascii >= 65 && ascii <= 90) || (ascii >= 97 && ascii <= 122))
    return true;
  else
    return false;
}
console.log(isPalindrome("A man, a plan, a canal: Panama"));
console.log(isPalindrome("race a car"));
console.log(isPalindrome("0P"));